Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Майкл_Сикорски,_Эндрю_Хониг_Вскрытие_покажет!_Практический_анализ.pdf
Скачиваний:
18
Добавлен:
19.04.2024
Размер:
17.17 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Глава 5. IDA Pro  119

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис. 5.5. Пример поиска

ряет результат инструкции strcmp. Один из операндов strcmp — строка $mab, которая, скорее всего, и является паролем.

004010E0

push

offset aMab

; "$mab"

004010E5

lea

ecx, [ebp+var_1C]

004010E8

push

ecx

 

004010E9

call

strcmp

 

004010EE

add

esp, 8

 

004010F1

test

eax, eax

 

004010F3

jnz

short loc_401104

 

004010F5

push

offset aKeyAccepted ; "Key Accepted!\n"

004010FA

call

printf

 

004010FF

add

esp, 4

 

00401102

jmp

short loc_401118

 

00401104

loc_401104

;

CODE XREF: _main+53j

00401104

push

offset aBadKey

; "Bad key\n"

00401109

call

printf

 

В следующем примере показан результат ввода обнаруженного нами пароля ($mab). Программа выводит другое сообщение:

C:\>password.exe

Enter password for this Malware: $mab

Key Accepted!

The malware has been unlocked

Этот пример демонстрирует, насколько быстро можно получить информацию о двоичном файле, воспользовавшись функцией поиска и ссылками.

Использование перекрестных ссылок

Перекрестные ссылки (в IDA Pro они называются xref) могут сказать вам, откуда вызывается функция или где используется строка. Если вы нашли интересную функцию и хотите узнать, с какими параметрами она вызывается, с помощью перекрестных ссылок вы можете быстро перейти в то место, где эти параметры помещаются в стек. Это также позволяет генерировать наглядные схемы, которые могут помочь при выполнении анализа.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

120  Часть II  •  Продвинутый статический анализ

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Перекрестные ссылки в коде

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В листинге 5.2 показана перекрестная ссылка , которая говорит о том, что данная функция (sub_401000) вызывается из главной функции со сдвигом 0x3. Код ссылки показывает, какой переход позволяет попасть в нужное место — в этом примере оно помечено как . Мы это знаем, потому что сдвиг 0x19 в sub_401000 является инструкцией jmp по адресу 0x401019.

Листинг 5.2. Перекрестные ссылки в коде

 

 

00401000

sub_401000

proc near

;

CODE XREF: _main+3p

00401000

push

ebp

 

 

 

00401001

mov

ebp, esp

 

 

00401003

loc_401003:

 

;

CODE XREF: sub_401000+19j

00401003

mov

eax, 1

 

 

 

00401008

test

eax, eax

 

 

0040100A

jz

short loc_40101B

 

 

0040100C

push

offset aLoop

; "Loop\n"

00401011

call

printf

 

 

 

00401016

add

esp, 4

 

 

 

00401019

jmp

short loc_401003

 

 

По умолчанию для каждой функции в IDA Pro выводится всего несколько перекрестных ссылок, даже если их становится намного больше во время вызова. Чтобы просмотреть все перекрестные ссылки функции, щелкните на ее имени и нажмите клавишу X. Окно, которое появится на экране, должно содержать список всех мест, откуда вызывается данная функция. На рис. 5.6 показано окно Xrefs со списком перекрестных ссылок для sub_408980 — в его нижней части можно видеть, что функция вызывается 64 раза (Line 1 of 64).

Выполните двойной щелчок на любом элементе списка, чтобы перейти по соответствующей ссылке в окно дизассемблирования.

Рис. 5.6. Окно Xrefs

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Перекрестные ссылки на данные

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Глава 5. IDA Pro  121

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Этот вид перекрестных ссылок используется для отслеживания данных внутри двоичного файла. Они могут указывать на любой байт данных, которые упоминаются в коде с помощью адреса памяти, как показано в листинге 5.3. Например, вы можете видеть перекрестную ссылку на DWORD 0x7F000001 . Она говорит нам о том, что данные используются в функции, размещенной по адресу 0x401020. В следующей строке показана перекрестная ссылка для строки <Hostname> <Port>.

Листинг 5.3. Перекрестные ссылки на данные

 

 

0040C000

dword_40C000

dd 7F000001h

;

DATA XREF: sub_401020+14r

0040C004

aHostnamePort

db '<Hostname> <Port>',0Ah,0 ; DATA XREF: sub_401000+3

Как вы помните из главы 1, статический анализ строк часто является отправной точкой в исследовании вредоноса. Если вы заметите интересную строку, воспользуйтесь функцией перекрестных ссылок в IDA Pro, чтобы узнать, где и как именно она применяется в коде.

Анализ функций

Одной из самых полезных особенностей IDA Pro является возможность распознавать и маркировать функции, разделяя их на локальные переменные и параметры. В листинге 5.4 показан пример функции, распознанной программой IDA Pro.

Листинг 5.4. Пример функции и стека

00401020

; =============== S U B

R O U T I N E=============================

00401020

 

 

 

00401020

; Attributes: ebp-based

frame

00401020

 

 

 

00401020

function

proc near

; CODE XREF: _main+1Cp

00401020

 

 

 

00401020

var_C

= dword ptr -0Ch

00401020

var_8

= dword ptr -8

00401020

var_4

= dword ptr -4

00401020

arg_0

= dword ptr 8

00401020

arg_4

= dword ptr 0Ch

00401020

 

 

 

00401020

 

push

ebp

00401021

 

mov

ebp, esp

00401023

 

sub

esp, 0Ch

00401026

 

mov

[ebp+var_8], 5

0040102D

 

mov

[ebp+var_C], 3

00401034

 

mov

eax, [ebp+var_8]

00401037

 

add

eax, 22h

0040103A

 

mov

[ebp+arg_0], eax

0040103D

 

cmp

[ebp+arg_0], 64h

00401041

 

jnz

short loc_40104B

Рис. 5.7. Панель инструментов для создания схем

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

w

 

 

to

 

 

122  Часть II  • 

Продвинутый статический анализ

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

o

m

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

00401043

mov

ecx, [ebp+arg_4]

 

 

 

 

 

 

 

 

00401046

mov

[ebp+var_4], ecx

 

 

 

 

 

 

 

 

00401049

jmp

short loc_401050

 

 

 

 

 

 

 

 

0040104B loc_40104B:

 

; CODE XREF: function+21j

 

 

 

 

 

 

 

 

0040104B

call

sub_401000

 

 

 

 

 

 

 

 

00401050 loc_401050:

 

; CODE XREF: function+29j

 

 

 

 

 

 

 

 

00401050

mov

eax, [ebp+arg_4]

 

 

 

 

 

 

 

 

00401053

mov

esp, ebp

 

 

 

 

 

 

 

 

00401055

pop

ebp

 

 

 

 

 

 

 

 

00401056

retn

 

 

 

 

 

 

 

 

 

00401056 function

endp

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Обратите внимание на то, как IDA Pro показывает, что в функции используется слой стека, основанный на EBP : это означает, что локальные переменные и параметры функции будут адресоваться через регистр EBP. Программа IDA Pro успешно распознала все локальные переменные и параметры этой функции. Первые она пометила префиксом var_, а вторые — префиксом arg_. Их имена содержат суффиксы, которые отвечают их сдвигу относительно регистра EBP. IDA Pro маркирует только те локальные переменные и параметры, которые используются в коде. Невозможно с уверенностью сказать, был ли распознан весь исходный код.

Как отмечалось в главе 4, локальные переменные имеют отрицательный сдвиг относительно регистра EBP, а аргументы — положительный. В листинге представлено начало стека . Первая строка говорит о том, что переменная var_C соотносится со значением -0xCh. Таким образом программа IDA Pro сообщает о том, что она подставила var_C вместо -0xC , делая инструкцию абстрактной. Например, инструкцию mov [ebp-0Ch], 3 можно прочитать как «var_C теперь равна 3». Такое абстрагирование делает чтение дизассемблированного кода более эффективным.

Иногда IDA Pro не удается определить функцию. В таких ситуациях вы можете создать ее вручную, нажав клавишу P. У IDA Pro также могут возникнуть сложности с определением слоев стека, основанных на регистре EBP, а вместо удобных меток на экране могут появиться инструкции mov [ebp-0Ch], eax и push dword ptr [ebp010h]. В большинстве случаев вы можете это исправить: для этого нужно нажать Alt+P, выбрать пункт BP Based Frame (Слой, основанный на BP) и указать 4 bytes for Saved Registers (4 байта для сохраненных регистров).

Схематическое представление

IDA Pro поддерживает пять инструментов для создания схем. Все они доступны на панели инструментов, показанной на рис. 5.7. Четыре из них используют перекрестные ссылки.

Если нажать одну из этих кнопок, на экране появится схема, построенная с помощью приложения WinGraph32. В отличие от графического представления в окне дизассемблирования, эти схемы нельзя редактировать внутри IDA (их часто называют устаревшими схемами). Инструменты для создания схем описаны в табл. 5.1.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Глава 5. IDA Pro  123

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Таблица 5.1. Варианты схем

Кнопка

Функция

Описание

 

 

 

 

Создает блок-схему

Пользователи обычно предпочитают интерактивный графиче-

 

текущей функции

ский режим окна дизассемблирования, но иногда, чтобы полу-

 

 

чить альтернативное представление, можно воспользоваться

 

 

этой кнопкой (с ее помощью мы будем создавать блок-схемы

 

 

в главе 6)

 

 

 

 

Выводит схему всех

Используйте эту кнопку, чтобы получить общее представ-

 

вызовов программы

ление об иерархии вызовов внутри программы (рис. 5.8).

 

 

Чтобы увидеть подробности, используйте функцию масшта-

 

 

бирования в WinGraph32. Схематическое представление

 

 

больших, статически скомпонованных исполняемых файлов

 

 

может оказаться слишком загроможденным и фактически

 

 

бесполезным

 

 

 

 

Выводит все ответ-

Эта кнопка помогает увидеть, как добраться до определенно-

 

вления выбранной

го идентификатора. Она также может показать разные пути,

 

перекрестной ссылки

которыми программа может достичь той или иной функции

 

 

 

 

Выводит перекрест-

Это удобное представление цепочки вызовов. Например,

 

ные ссылки для вы-

на рис. 5.9 показана схема для одной функции. Заметьте,

 

бранного символа

как sub_4011f0 вызывает sub_401110, а та потом обращается

 

 

к gethostbyname. Так вы можете легко определить назначение

 

 

самой функции и ее вложенных вызовов. Это самый простой

 

 

способ получить краткую сводку о функции

 

 

 

 

Выводит схему пере-

Используйте эту кнопку для построения собственных схем.

 

крестных ссылок,

Вы можете задать глубину рекурсии, используемые символы,

 

заданную пользова-

начальный или конечный символ, а также типы узлов, кото-

 

телем

рые будут исключены из схемы. Это единственный способ

 

 

изменить представление, сгенерированное в IDA Pro для

 

 

вывода в WinGraph32

 

 

 

Рис. 5.8. Схема перекрестных ссылок программы